Is it mandatory to register a service in container whenever it is created in ASP.NET Core

जब ASP.NET Core में किसी क्लास को सर्विस के रूप में निर्मित किया जाता है तो क्या उसको IOC कंटेनर में रजिस्टर करना अनिवार्य होता है? दोस्तों! आइए, इस प्रश्न का उत्तर समझते हैं। 

किसी भी क्लास को सर्विस के रूप में उपयोग करने के लिए उसे IOC कंटेनर में रजिस्टर करना अनिवार्य नहीं होता। लेकिन, Dependency Injection (DI) के माध्यम से यदि आप किसी क्लास का उपयोग करना चाहते हैं, तो उसे कंटेनर में रजिस्टर करना आवश्यक होता है।

1. बिना रजिस्ट्रेशन के क्लास का उपयोग (Without DI)

अगर किसी क्लास को नॉर्मल क्लास की तरह उपयोग करना है, तो उसे कंटेनर में रजिस्टर करने की जरूरत नहीं होती। आप सीधे new कीवर्ड से उसका ऑब्जेक्ट बना सकते हैं।

Example: बिना रजिस्ट्रेशन के क्लास का उपयोग

public class MyService
{
    public string GetMessage() => "Hello, World!";
}

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var service = new MyService(); // बिना DI के ऑब्जेक्ट बनाना
        string message = service.GetMessage();
        return Content(message);
    }
}

इसमें MyService को Container में रजिस्टर करने की जरूरत नहीं पड़ी। लेकिन, यह Dependency Injection (DI) का लाभ नहीं ले पाएगा, जैसे कि Lifetime Management, Loose Coupling आदि।

2. कंटेनर में रजिस्टर करके उपयोग करना (With DI)

यदि आप चाहते हैं कि MyService को Dependency Injection से कंट्रोल किया जाए, तो उसे कंटेनर में रजिस्टर करना होगा।

Example: DI के साथ क्लास का उपयोग

public interface IMyService
{
    string GetMessage();
}

public class MyService : IMyService
{
    public string GetMessage() => "Hello from DI!";
}

// Service Registration (Program.cs)
builder.Services.AddScoped<IMyService, MyService>();

// Service Injection in Controller
public class HomeController : Controller
{
    private readonly IMyService _myService;

    public HomeController(IMyService myService)
    {
        _myService = myService;
    }

    public IActionResult Index()
    {
        string message = _myService.GetMessage();
        return Content(message);
    }
}

इसका फायदा:

  • Dependency Injection का लाभ (Loose Coupling, Testability)
  • Lifetime Management (Scoped, Singleton, Transient)
  • Mocking और Unit Testing करना आसान

3. निष्कर्ष

सवाल उत्तर
क्या सर्विस क्लास को DI कंटेनर में रजिस्टर करना अनिवार्य है? नहीं, अगर new से ऑब्जेक्ट बना रहे हैं तो रजिस्टर करने की जरूरत नहीं।
क्या DI कंटेनर में रजिस्टर करने से फायदा होता है? हां, इससे Loose Coupling, Lifetime Management, और Testing आसान हो जाती है।
कब रजिस्टर करना चाहिए? जब Dependency Injection का उपयोग करना हो या जब सर्विस को अन्य क्लास में Inject करना हो।

अगर आपका कोड छोटा और सिंपल है, तो बिना रजिस्ट्रेशन new से ऑब्जेक्ट बनाना सही है। लेकिन बड़ी एप्लिकेशन में DI कंटेनर का उपयोग करना बेस्ट प्रैक्टिस है।

© 2025 सभी अधिकार सुरक्षित।


Next: ASP.NET Core में किसी क्लास को सर्विस के रूप में रजिस्टर करने के लिए क्या इंटरफेस बनाना जरूरी है?

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks